074 - ABC String 2(★6)
a,b,cをそれぞれ0,1,2に対応させてみる。
現在の数を1減らし、それより左を全てmod3で+1するという操作が2進数の繰り下がりによく似ていることに気づく。
現に、a,bの2種類だけならば2進数のカウントダウンと同一視できるためである。そこで、以下の解法を思いつく。
$ i 文字目がbならば$ 2^i をスコアに足す。cならば$ 2^{i+1}をスコアに足す。
このように計算出来たスコアが操作回数のポテンシャルに他ならない。ポテンシャルを1だけ減らすのは可能(a以外が初めて現れる位置で操作を行う)なので、ポテンシャルがそのまま操作回数になる。
https://atcoder.jp/contests/typical90/submissions/60285346
こういうの難しいよね